import torch


class ParameterConfig():
    def __init__(self):
        # 判断是否使用GPU（1.电脑里必须有显卡；2.必须安装cuda版本的pytorch）
        self.device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
        print('Using Device:{}'.format(self.device))
        # 词典路径：在vocab文件夹里面
        self.vocab_path = './vocab/vocab.txt'
        # 训练数据文件路径
        self.train_path = './data/medical_train.pkl'
        # 验证数据文件路径
        self.valid_path = './data/medical_valid.pkl'
        # 模型配置文件
        self.config_json = './config/config.json'
        self.pretrained_model = ''
        self.batch_size = 16  # 一个批次的样本数
        self.lr = 2.6e-5  # 学习率
        self.eps = 1.0e-09  # 为了增加数值计算的稳定性而加到分母里的项，防止在实现中除以零
        self.epochs = 60  # 轮数
        self.save_model_path = './save_model'  # 保存模型路径
        self.loss_step = 2  # 训练多少个batch打印日志
        self.gradient_accumulation_steps = 4  # 梯度累积
        self.num_warmup_steps = 100  # 学习率预热步数
        self.max_grad_norm = 2.0  # 梯度裁剪
        self.ignore_index = -100  # 忽略字符
        self.repetition_penalty = 10.0  # 重复惩罚参数，若重复较高，可以适当增大这个值
        self.max_len = 300  # 每轮对话的最大长度，超过的话会进行截断
        self.max_history_len = 5  # 历史对话的最大句子轮数
        self.top_k = 3
        # self.top_p = 0.9
        self.save_history_path = './history'
        self.result_path = './result'